/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package model.produto;
import java.util.List;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceException;
import model.excecoes.ErroDAOException;
import model.excecoes.ErroNegocioException;
import model.interfaces.INegocioProduto;
import model.factory.Factory;

/**
 *
 * @author Marcos
 */
public class NegocioProduto implements INegocioProduto{

    private RepositorioProduto repProduto = null;
    
    public NegocioProduto(){
        repProduto = Factory.getProdutoDAO();
    }
    
    private boolean verificarExistencia(String descricao, String marca)throws ErroDAOException, PersistenceException, NoResultException{
        return repProduto.verificarExistencia(descricao, marca);
    }
    
    @Override
    public void cadastrarProduto(Produto produto) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        if(verificarExistencia(produto.getDescricao(), produto.getMarca())){
            throw new ErroNegocioException("O Produto já está cadastrado.\nPor favor insira os dados corretos ou cancele a operação.");
        }
        
        if(produto.getDescricao().length() > 300){
            throw new ErroNegocioException("O número de caracteres excedeu o limite.\nO Campo Descrição só aceita até 300 caracteres.");
        }
        
        
        
        if(produto.getMarca().length() > 300){
            throw new ErroNegocioException("O número de caracteres excedeu o limite.\nO Campo Marca só aceita até 300 caracteres.");
        }
        
        
        
        repProduto.cadastrar(produto);
    }

    @Override
    public void alterarProduto(Produto produto) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        if(verificarExistencia(produto.getDescricao(), produto.getMarca()) == false){
            throw new ErroNegocioException("O Produto não foi encontrado.\nPor favor insira os dados corretos ou cancele a operação.");
        }
        
        if(produto.getDescricao().length() > 300){
            throw new ErroNegocioException("O número de caracteres excedeu o limite.\nO Campo Descrição só aceita até 300 caracteres.");
        }
        
        
        
        if(produto.getMarca().length() > 300){
            throw new ErroNegocioException("O número de caracteres excedeu o limite.\nO Campo Marca só aceita até 300 caracteres.");
        }
        
        repProduto.alterar(produto);
    }

    @Override
    public void excluirProduto(Produto produto) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        if(verificarExistencia(produto.getDescricao(), produto.getMarca()) == false){
            throw new ErroNegocioException("O Produto não foi encontrado.\nPor favor insira os dados corretos ou cancele a operação.");
        }
        
        repProduto.excluir(produto);
    }

    @Override
    public List<Produto> listarProduto(String consulta, String campo) throws ErroDAOException, ErroNegocioException, PersistenceException, NoResultException {
        List<Produto> produtos = repProduto.listarProduto(consulta, campo);
        
        
        if(!consulta.equals("Todos") && !campo.equals("Todos")){
            if(produtos.isEmpty()){
                throw new ErroNegocioException("Produto não foi cadastrado ou não foi encontrado.\nPor favor insira os dados corretos ou cancele a operação.");
            }
        }
        
        return produtos;
    }
    
}
